const fs = require('fs');
const http = require('http');
const Buffer = require('buffer').Buffer;

// 确定读取路径
const filePath = process.argv[2] || __filename;
// 定义缓冲区大小（每次读取64KB）
const BUFFER_SIZE = 64 * 1024;

const server = http.createServer((req, res) => {
    // 1. 打开文件
    fs.open(filePath, 'r', (openErr, fd) => {
        if (openErr) {
            res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
            res.end(`错误：无法打开文件 - ${openErr.message}`);
            console.error('文件打开错误：', openErr.message);
            return;
        }

        let fileContent = '';
        const buffer = Buffer.alloc(BUFFER_SIZE);

        // 2. 读取文件（递归读取直到结束）
        const readFile = () => {
            fs.read(fd, buffer, 0, BUFFER_SIZE, null, (readErr, bytesRead) => {
                if (readErr) {
                    fs.close(fd, () => {}); // 出错时确保关闭文件描述符
                    res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
                    res.end(`错误：文件读取失败 - ${readErr.message}`);
                    return;
                }

                // 读取到内容则追加到结果
                if (bytesRead > 0) {
                    fileContent += buffer.slice(0, bytesRead).toString('utf8');
                    readFile(); // 继续读取下一段
                } else {
                    // 3. 读取完成，关闭文件并响应内容
                    fs.close(fd, (closeErr) => {
                        if (closeErr) {
                            console.error('文件关闭错误：', closeErr.message);
                        }
                        res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
                        res.end(fileContent);
                    });
                }
            });
        };

        // 启动读取
        readFile();
    });
});

server.listen(8081, () => {
    console.log(`服务器已启动，监听端口8081`);
    console.log(`当前读取目标：${filePath}`);
    console.log(`请访问 http://localhost:8081 查看结果`);
});